Motor Avançado
Utilize esta categoria para movimentar motores até uma posição específica com encoders.
Exemplo
Girando um motor até 1000 ticks
- Blocos
- Texto

from library.encoder import Encoder
from library.motor_advanced import MotorAdvanced, _MotorModes
motor1 = MotorAdvanced(1)
encoderA = Encoder('A')
async def autonomous():
pass
async def teleop(gamepad):
motor1.setMotorType(MotorAdvanced.ULTRA_PLANETARY)
motor1.setEncoder(encoderA)
motor1.setTargetPosition(1000)
motor1.setMotorMode(_MotorModes.RUN_TO_TARGET)
motor1.setPower(0.6)
- O código acima realiza as seguintes ações:
- Define o motor como Ultra Planetária;
- Define o encoder conectado ao motor como o da porta A;
- Coloca a posição alvo do motor como 1000 ticks;
- Define o modo do motor para executar até a posição;
- Coloca a saída do motor em 60%.
Girando um motor até 500 ticks no período autônomo
- Blocos
- Texto

import asyncio
from library.encoder import Encoder
from library.motor_advanced import MotorAdvanced, _MotorModes
motor1 = MotorAdvanced(1)
encoderA = Encoder('A')
async def autonomous():
motor1.setMotorType(MotorAdvanced.ULTRA_PLANETARY)
motor1.setEncoder(encoderA)
motor1.setTargetPosition(500)
motor1.setMotorMode(_MotorModes.RUN_TO_TARGET)
motor1.setPower(0.5)
while motor1.isBusy():
await asyncio.sleep_ms(20)
motor1.setPower(0)
async def teleop(gamepad):
pass
- O código acima realiza as seguintes ações:
- Define o motor como Ultra Planetária;
- Define o encoder conectado ao motor como o da porta A;
- Coloca a posição alvo do motor como 500 ticks;
- Define o modo do motor para executar até a posição;
- Coloca a saída do motor em 50%.
Conversão de Ticks para unidades angulares
Não é fácil sempre trabalhar com ticks, por isso é geralmente interessante convertemos para ângulos ou unidades lineares.
Para converter para ângulos é necessário primeiro saber o CPR (Counts Per Revolution) do motor, isto é, quantos ticks estão presentes em 1 volta do motor. O motor Core HEX por exemplo possui 28 ticks de CPR.
A Ultra Planetária é na realidade um motor HD HEX com reduções do tipo planetárias, nesse caso, consideramos que apenas o motor HD HEX possui 28 ticks de CPR (as reduções alteram o valor do CPR, conforme explicado abaixo).
Considerando o caso apenas do eixo do motor, a nossa conversão seria:
(setPointEmGraus/360) * CPR = targetEmTicks
Quando colocamos uma redução estamos aumentando ou diminuindo o CPR por consequência, a explicação disso é relacionada ao fato de que estamos fazendo com que o eixo de saída dê mais ou menos voltas que o eixo do motor (que possui um CPR fixo). Dessa forma poderiamos ajustar a equação para Ultra Planetárias da seguinte forma:
(setPointEmGraus/360) * (CPR * Redução) = targetEmTicks
Descrição das Funções
set encoder and motorType
Permite escolher a porta de encoder utilizada e o tipo de motor.
- Blocos
- Texto

motor1.setMotorType(MotorAdvanced.ULTRA_PLANETARY)
motor1.setEncoder(encoderA)
setTargetPosition
Define a posição até a qual o motor deve girar. Unidade em ticks.
- Blocos
- Texto

motor1.setTargetPosition(0)
setMotorMode
Define o modo do motor.
- Blocos
- Texto

motor1.setMotorMode(_MotorModes.RUN_TO_TARGET)
isBusy
Retorna um valor lógico dependendo se o motor está indo até a posição.
- Blocos
- Texto

motor1.isBusy()